home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
language
/
nasm20
/
nasm20s.zoo
/
chkffff.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-01-22
|
4KB
|
168 lines
/* ---------------------------------------------------------------------- */
/* Copyright (C) 1992 by Natürlich! */
/* This file is copyrighted! */
/* Refer to the documentation for details. */
/* ---------------------------------------------------------------------- */
/* ---------------------------------------------------------- */
/* rev. history 1.0 -- */
/* 1.1 -- checks for faulty headers */
/* 1.2 -- no real changes */
/* ---------------------------------------------------------- */
#include "defines.h"
#include <stdio.h>
#include <stdlib.h>
#include OSBIND
#define __BIG_GENERATOR__ 1
#include "code.h"
struct
{
word ffff,
start,
end;
} header;
word __x;
#if __NSTDC__
void fixheader( void),
nerror( char *);
#endif
void fixheader()
{
header.start = dpeek( &header.start);
header.end = dpeek( &header.end);
}
void nerror( s)
char *s;
{
fprintf( stderr, "chkffff: Error \"%s\"\n", s);
exit(1);
}
#if OS == TOS
int tossable;
#endif
int what_the_fuck;
main( argc, argv)
int argc;
char **argv;
{
static char infile[ 256];
extern char *getenv();
int i = 0,
cnt = 0,
fp;
unsigned long space, bread,
total = 0;
while( ++i < argc)
{
if( *argv[i] == '-')
switch( argv[i][1])
{
#if OS == TOS
case 'T' :
case 't' :
tossable = 1;
break;
#endif
#ifdef __DATE__
case ':' :
fputs( __DATE__, stderr);
# ifdef __TIME__
fprintf( stderr, " %s", __TIME__);
# endif
putc( '\n', stderr);
break;
#endif
case 'V' :
case 'v' :
fprintf( stderr, "chkffff v1.2 (c) 1992 by Natuerlich! -- views $FF $FF binary headers\n");
break;
case 'W' :
case 'w' :
what_the_fuck = ! what_the_fuck;
}
else
{
if( infile[0])
goto usage;
strcpy( infile, argv[i]);
}
}
if( ! infile[0])
goto usage;
if( (fp = Fopen( infile, OPEN_R)) < 0)
nerror("File open failed");
if( (bread = Fread( fp, 6L, &header)) < 6)
nerror("File trunctated\n");
if( header.ffff != 0xFFFF)
nerror("Not a $FF $FF binary file");
for(;;)
{
fixheader();
space = (unsigned long) (1 + header.end - header.start);
printf("Segment %2.2d -- From: $%4.4X To: $%4.4X %5.5ld bytes\n",
++cnt, header.start, header.end, space);
if( header.end < header.start && ! what_the_fuck)
nerror("Segment wraps around $FFFF");
total += space;
if( Fseek( space, fp, 1) < 0)
nerror("File ended unexpectedly early");
if( (bread = Fread( fp, 4L, (char huge *) &header + 2)) <= 0)
break;
if( bread < 4)
nerror("Garbage at end of segment");
if( header.start == 0xFFFF)
{
header.ffff = header.start;
header.start = header.end;
if( (bread = Fread( fp, 2L, (char huge *) &header + 4)) <= 0 ||
bread < 2)
nerror("This is a trashed binary");
}
}
printf("------------------------------------ %5.5ld bytes total\n", total);
#if OS == TOS
keypress();
#endif
return(0);
usage:
#if OS == TOS
fputs( "usage: chkffff [-t] binary.file\n", stderr);
#else
fputs( "usage: chkffff binary.file\n", stderr);
#endif
fputs( "\t-v : version\n", stderr);
fputs( "\t-w : segment wraps OK\n", stderr);
#if OS == TOS
fputs( "\t-t : wait for keypress before exiting\n", stderr);
keypress();
#endif
return( 1);
}
keypress()
{
#if OS == TOS
if( tossable)
{
while( Bconstat( 2))
Bconin( 2);
Bconin( 2);
}
#endif
}